App = {
    web3Provider: null,
    contracts: {},

    init: async function() {
        // Load pets.
        $.getJSON('../pets.json', function(data) {
            var petsRow = $('#petsRow');
            var petTemplate = $('#petTemplate');

            for (i = 0; i < data.length; i ++) {
                petTemplate.find('.panel-title').text(data[i].name);
                petTemplate.find('img').attr('src', data[i].picture);
                petTemplate.find('.pet-breed').text(data[i].breed);
                petTemplate.find('.pet-age').text(data[i].age);
                petTemplate.find('.pet-location').text(data[i].location);
                petTemplate.find('.btn-adopt').attr('data-id', data[i].id);

                petsRow.append(petTemplate.html());
            }
        });

        return await App.initWeb3();
    },
    //初始化web3
    initWeb3: function() {

        if (typeof web3 !== 'undefined') {
            App.web3Provider = web3.currentProvider;
        } else {
            App.web3Provider = new Web3.providers.HttpProvider("http://127.0.0.1:7545");
        }
        web3 = new Web3(App.web3Provider);

        return App.initContract();
    },
    //初始化合约
    initContract: function() {

        $.getJSON('Adoption.json',function (data) {
            var AdoptionArtifact  = data;
            App.contracts.Adoption  =  TruffleContract(AdoptionArtifact);
            App.contracts.Adoption.setProvider(App.web3Provider);

            return App.markAdopted();

        });

        return App.bindEvents();
    },

    bindEvents: function() {
        $(document).on('click', '.btn-adopt', App.handleAdopt);
    },
    //标记领养状态
    markAdopted: function(adopters, account) {

        var adoptionInstance;
        //App.contracts.Adoption.deployed()  拿到合约实例
        App.contracts.Adoption.deployed().then(function (instance) {
            adoptionInstance = instance;
            return adoptionInstance.getAdopters.call();
        }).then(function (adopters) {
            for (i =0; i< adopters.length; i++){
                if (adopters[i] !== '0x0000000000000000000000000000000000000000'){
                    $('.panel-pet').eq(i).find('button').text("Success").attr('disabled', true);

                }
            }

        }).catch(function (err) {
            console.log(err.message)
        })
    },
    //处理领养事件
    handleAdopt: function(event) {
        event.preventDefault();
        var adoptionInstance;
        var petId = parseInt($(event.target).data('id'));
        //拿到当前环境账户
        web3.eth.getAccounts(console.log);
        web3.eth.getAccounts(function (error,accounts) {
            var account = accounts[0];
            App.contracts.Adoption.deployed().then(function (instance) {
                adoptionInstance = instance;
                return adoptionInstance.adopt(petId,{from: account});
            }).then(function (result) {
                return App.markAdopted();
            }).catch(function (err) {
                console.log(err.message)
            })

        });
    }

};

$(function() {
    $(window).load(function() {
        App.init();
    });
});
